#pragma once

#include <SDL_mixer.h>
#include <map>

#include "../Main.h"
#include "../World.h"
#include "Screen.h"
#include "InventoryScreen.h"

/* Najwyższa klasa, opiekuje się całym ekranem, komunikuje się bezpośrednio z Game */
class Interface : Screen {
	public:
		enum Button {
			b_none, b_inventory, b_pause, b_menu, b_exit
		};

		enum Screen {
			s_world, s_inventory
		};

	protected:
		int bitsPerPixel; //ilość bitów określających kolor jednego piksela
		Uint32 flags; //flagi ekranu

		SDL_Surface* interfaceSurface; //obrazek interfejsu
		Button downButton; //czy myszka wcisnęła się na jakimś przycisku
		Screen activeScreen;

		World* world;
		InventoryScreen* inventoryScreen;
		TTF_Font* font;
		map<string, SDL_Rect> blits;

	public:
		/* Konstruktor, tylko ustawia zmienne */
		Interface(int, int, int = 24, Uint32 = SDL_HWSURFACE|SDL_ANYFORMAT/*|SDL_FULLSCREEN*/);

		/* Przygotowanie interfejsu do pracy */
		bool Init();

		/* Wyłącza SDL-a, niszczy ekran */
		void DeInit();

		/* Rysuje interfejs na ekranie */
		bool Draw(bool drawCentre = false);

		/* Rysuje ekran główny */
		bool DrawCentre();

		/* Obsługuje kliknięcie na interfejsie */
		void OnMouseButtonDown(int x, int y, int button);

		/* Obsługuje puszczenie przycisku myszy na interfejsie */
		void OnMouseButtonUp(int x, int y, int button);

		/* Przełącza ekran ekwipunku, zwraca czy jest po wykonaniu otwarty */
		bool ToggleInventory();

		World* getWorld() { return world; }

	protected:
		/* Zwraca w jaki przycisk znajduje się pod x, y */
		Interface::Button isInsideButton(int x, int y);

		/* Zwraca true, gdy punkt x, y należy do głównego ekranu */
		bool isInsideCentre(int x, int y);
};
